home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / fileutil / fileutils-3.16.tar.gz / fileutils-3.16.tar / fileutils-3.16 / lib / interlock < prev    next >
Text File  |  1996-10-10  |  1KB  |  47 lines

  1. #! /bin/sh
  2.  
  3. # interlock - wrap program invocation in lock to allow
  4. #             parallel builds to work.
  5. # Written by Tom Tromey <tromey@cygnus.com>, Aug 10 1996
  6. #
  7. # This program is free software; you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation; either version 2, or (at your option)
  10. # any later version.
  11. #
  12. # This program is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with this program; if not, write to the Free Software
  19. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  20.  
  21. # Usage:
  22. #   interlock lock-dir-name program args-to-program...
  23.  
  24. dirname="$1"
  25. program="$2"
  26.  
  27. shift
  28. shift
  29.  
  30. while (mkdir $dirname > /dev/null 2>&1 && exit 1 || exit 0); do
  31.    # Wait a bit.
  32.    sleep 1
  33. done
  34.  
  35. # Race condition here: if interrupted after the loop but before this
  36. # trap, the lock can be left around.
  37. trap "rmdir $dirname > /dev/null 2>&1" 1 2 3 15
  38.  
  39. # We have the lock, so run the program.
  40. $program ${1+"$@"}
  41. ret=$?
  42.  
  43. # Release the lock.
  44. rmdir $dirname > /dev/null 2>&1
  45.  
  46. exit $ret
  47.